Quién crea/maneja hebras?
Opción 2: Creadas y manejadas en nivel usuario, dentro de un proceso
Una biblioteca linkeada con el programa que usa hebras
Operaciones de creación, destrucción, etc sobre hebras son llamadas a procedimientos (no llamadas a sistema)
Descritas como muchas to una
Muchas hebras mapeadas a un proceso/hebra del kernel
Biblioteca posee planificador de hebras creadas por proceso
proceso
Hebra kernel
Ilustración hebras de kernel
Espacio Direccionamiento
hebra
Mach, NT,
Linux, .
kernel
Operaciones sobre hebras mediante llamadas a sistema al kernel
CPU
Hebras nivel usuario
Espacio de direccionamiento
hebra
Mach, NT,
Linux, .
kernel
Kernel crea maneja hebras de kernel
CPU
(Gp:) Biblioteca hebras
nivel usuario
(Gp:) Operaciones sobre hebras
Hebras de kernel
Manejando mejor hebras nivel usuario
Espacio de direccionamiento
hebra
Mach, NT,
Linux, .
kernel
(Gp:) Biblioteca hebras
Nivel usuario
(Gp:) Operaciones sobre hebras
Manejo hebras kernel
CPU
Hebras kernel
Implementación de hebras nivel usuario
Kernel ve a proceso como cualquier otro
Hebras de nivel usuario invisibles al SO
Pero proceso incluye funcionalidad proporcionada por biblioteca de hebras la cual tiene su propio planificador
Planificador de biblioteca decide que hebra del proceso se ejecuta a determinado tiempo
SO provee de llamadas a sistema no bloqueantes, de manera que si una hebra de usuario hace E/S biblioteca de hebras sabe que puede hacer cambio de contexto en hebras de usuario
Hebras de nivel usuario
POSIX Threads API
En biblioteca libpthreads.so en linux
t = pthread_create(attributes, start_procedure)
Crea hebra de control, que comienza ejecución en procedimiento dado
Puede especificar creación de hebras nivel kernel en attributes
pthread_cond_wait(condition_variable)
Hebra se bloquea hasta que condición se cumple
pthread_signal(condition_variable)
Señaliza a hebra que espera por condicion
pthread_exit()
Termina la hebra
pthread_join(t)
Espera por hebra t hasta que termine
Resumen
Hebras de kernel son más eficientes que procesos
Hebras de nivel usuario son más rápidas que las de kernel
Operaciones no pasan a través de SO
Si hebras de nivel usuario residen en un proceso representado por sólo una hebra de kernel
No puede proporcionar paralelismo si solo una hebra de kernel asociada a proceso
Si una hebra de proceso de usuario se bloquea en E/S entonces todo el proceso se bloquea (asumiendo que solo una hebra de kernel está asociada a proceso)
Normalmente biblioteca maneja llamadas a sistema no bloqueantes por hebras de usuario de manera que pueda utilizar hebra de kernel para otra hebra de usuario
Página anterior | Volver al principio del trabajo | Página siguiente |